반사 행동에서 계획으로
에이전트 설계의 발전 과정에서 우리는 반사 에이전트에서 출발합니다. 이는 단순한 규칙에 따라 지각을 행동에 직접 매핑합니다(예: "앞차가 제동하면 제동을 시작한다"). 그리고 다음으로 문제 해결 에이전트로 나아갑니다. 반사 에이전트는 즉각적인 상황에 따라 작동하는 반면, 문제 해결 에이전트는 목표 기반입니다. 이들은 특정 목표를 충족하는 행동 순서를 찾기 위해 자신의 행동이 가져올 미래의 결과를 고려합니다.
- 반사 에이전트: $Action = Function(Percept)$
- 계획 에이전트: $Action\_Sequence = Search(State, Goal)$
원자적 상태 표현
이 기본적인 수준에서 에이전트는 원자적 표현을 활용합니다. 즉, 세계의 상태는 블랙박스로 취급되며, 탐색 알고리즘이 볼 수 있는 내부 구조가 없는 단일 노드로 간주됩니다. 에이전트는 다음에 대해서만 추론합니다:
- 상태 ($S$): 환경의 스냅샷.
- 행동 ($A$): 상태 간 전이.
- 목표 검사: 상태 $s \in S_{goal}$인지 확인하는 불리언 검사.
문제 해결 루프
문제 해결 에이전트는 환경을 탐색하기 위해 다음과 같은 독특한 4단계 주기를 따릅니다:
- 목표 설정: 현재 상황에 따라 추구할 목표를 결정합니다.
- 문제 설정: 현실 세계를 수학적 모델(상태와 행동)로 추상화합니다.
- 탐색: 다음에 해당하는 최적 경로를 찾기 위해 최적 경로를 찾기 위해 행동 순서를 시뮬레이션합니다.
- 실행: 정적 환경을 가정하여 추가 고려 없이 탐색 단계에서 찾은 행동을 수행합니다.
Python 구현 (agent_types.py)
1
class ReflexAgent:
2
defact(self, percept):
3
# Direct mapping: Rule -> Action
4
return rules.get(percept, default_action)
5
6
class ProblemSolvingAgent:
7
def__init__(self):
8
self.seq = [] # Buffered action sequence
9
10
defact(self, percept):
11
# If we are mid-execution, continue
12
ifself.seq:
13
returnself.seq.pop(0)
14
15
# Otherwise, Plan (Search)
16
state = self.update_state(percept)
17
goal = self.formulate_goal(state)
18
problem = self.formulate_problem(state, goal)
19
20
# Search returns a list of actions
21
self.seq = search_algorithm(problem)
22
23
returnself.seq.pop(0)